perm filename PARTS.OLD[MSS,LCS]1 blob sn#170762 filedate 1975-07-27 generic text, type T, neo UTF8
00100	C THIS AIDS IN EXTRACTING PARTS FROM SCORES. LOAD WITH MSFAIL.FAI
00210		COMMON/STF/RSTFAC(-3/4),RSTJ2 /XXX/LK,LP,JY
00232		COMMON/XRN/RN(2000),XN(2000)
00254		COMMON RS,JA,REST,J2,RQ(18),JX,JR,LX,RDIS
00276		COMMON/POSI/STFF(-3/4),JJ2,PQ/PTR/PWDS(250),L,LL,I,IX
00300	      DIMENSION IV(78),LIST(200),
00400		1XWDS(250)
00500	C**** RN MIGHT HAVE TO BE 4000 ******
00600		COMMON /PX/POS,SX
00605		DATA FIB/.5/
00650		EQUIVALENCE (RQ(2),R4),(R5,RQ(3)),(R6,RQ(4)),(R7,RQ(5))
00655		1,(R8,RQ(6)),(R9,RQ(7))
00660	C  RQ(2) IS R4, RQ(3) IS R5 ETC.
00700	
00800	14	JT=0
00900		JR=0
01000		REWIND 1
01100	1	FORMAT(' TYPE OUTPUT FILE NAME  ',$)
01200		TYPE 1
01300		ACCEPT 2,NAMX
01400	213	IF(LOOKD(NAMX).GE.0)GO TO 13
01500		TYPE 88,NAMX
01600		ACCEPT 2,L
01700		IF(L.EQ.'N')GO TO 14
01800	88	FORMAT(' WRITE OVER FILE ',A5,'????  '$)
01900	13	CALL OFILE(1,NAMX)
02000		XWDS(1)=1
02010		JRH=-1
02020	C  FOR REST COLLECTION
02100		IF(JT.EQ.0)RM=0
02200		L=1
02210		JX=0
02300		LX=1
02400		LP=1
02410		IF(JT.NE.0)GO TO 87
02500	CJ44	FORMAT(' TYPE TOP OUTPUT STAFF #  ',$)
02600	CJ	TYPE 44
02700	CJ	ACCEPT 5,RS
02750	CJ	RSX=RS
02755		RS=3
02760	C  SAVE UPPER STAFF NUM FOR NEXT FILE.
02770		TYPE 144
02775	144	FORMAT(' STAFF SIZE = '$)
02780		ACCEPT 5,STFSZ
02785	C  NON-ZERO STFSZ WILL CHANGE P5 IN ALL USED STAVES.
02800	10	IF(JT.EQ.0)GO TO 83
02900	87	NAME=NAME+2
03000		GO TO 84
03100	86	FORMAT(1XA5)
03200	3	FORMAT(' TYPE INPUT NAME, (CONT), (NOBAR)  ',$)
03300	83	TYPE 3
03400		ACCEPT 2,NAME,JT,NBAR
03500	C  TYPE ANY NUMBER AFTER NAME AND IT WILL GO TO NEXT LETTER IN ALPH.
03510		NAMZ=NAME
03600		IF(NBAR.NE.0)NBAR=-1
03700	C  ANY THIRD NUM. SUPPRESSES SCORE BARLINE FEATURE
03800	84	LK=LP
03900		IF(LOOKD(NAME))GO TO 284
03910		NAME=NAMZ+256
03920		IF(LOOKD(NAME).GE.0)GO TO 201
03930		NAMZ=NAME
04000	C  FOUND NO MORE TO READ
04100	284	TYPE 86,NAME
04200		JZ=0
04300		IF(RM.NE.0)GO TO 77
04400		RM=-1
04500	4	FORMAT(' TYPE INST NAME, (RESPC?) '$)
04600		TYPE 4
04700		ACCEPT 2,RNAM,NRS
04705	C  TYPE ANY NUM AFTER INS. NAME TO STOP RHYTH RESPACING.
04710		IF(RNAM.GT.0)REREAD 5,SN
04800		IF(INM.EQ.'99')GO TO 20
04900	CC	K=SN/100.
05000		TYPE 46
05100	46	FORMAT(' TRANS. NUM. -- '$)
05200		ACCEPT 5,TR
05202	C  TRANSPOSITION BY STEPS
05300		IF(TR.GE.99)GO TO 83
05400	77	REWIND 21
05500	177	CALL IFILE(21,NAME)
05600		READ(21),ITEM,I,
05700		1 (PWDS(K),K=1,ITEM+1),(RN(K),K=1,I-1),ISCR,(IV(K),K=1,ISCR),
05800		1 LCNT,(LIST(K),K=1,LCNT),RSTFAC,STFF
06000		DO 45 K=1,ITEM
06100		J=PWDS(K)
06200		IF(RN(J+1).NE.8)GO TO 45
06210		IF(RNAM)GO TO 145
06220		IF(RN(J+2).EQ.SN)GO TO 8 
06230		GO TO 45
06290	145	R9=RN(J+9)
06295		TYPE 86,R9
06300		IF(R9.NE.RNAM)GO TO 45
06400		SN=RN(J+2)
06410		IF(STFSZ.EQ.0)STFSZ=RSTFAC(IFIX(SN))
06500	C  FOUND THE STAFF
06600		GO TO 8
06700	45	CONTINUE
06800	C??	L=JX
06900	C??	LP=JY
07000		TYPE 16
07100	16	FORMAT(' INST. NOT FOUND'/)
07200		GO TO 10
07250	8	SIG=200
07275	C  FOR TRANSP. SECTION.
07300		DO 6 K=1,ITEM
07400		J=PWDS(K)
07410		R=RN(J+1)
07420		IF(R.NE.10)GO TO 800
07422		IF(RN(J).LT.4)GO TO 80
07424		IF(RN(J+6).GT.1.3)GO TO 6
07426	C  SKIPS PAGE NUMS. (I.E. BIG SIZE)
07430		IF(RN(J).LT.6)GO TO 80
07440	C  FOUND A NUM. IN BOX ↓↓
07450		RN(J+2)=SN
07460		GO TO 81
07500	800	IF(R.NE.4)GO TO 80
07600		IF(NBAR)GO TO 80
07700		IF(RN(J).NE.2)GO TO 80
07800	C  FOUND A BAR LINE
07900		KB=RN(J+4)/100.
08000		RN(J+4)=1.+KB*100.
08100	C  KB IS FOR THICK BARS.
08200		R=RN(J+3)
08300		DO 82 KA=K+1,ITEM
08400		KB=PWDS(KA)
08500		IF(RN(KB+1).NE.4)GO TO 82
08600		IF(RN(KB).NE.2)GO TO 82
08700	C  AVOIDS DUPLICATE BARS.
08800		IF(ABS(R-RN(KB+3)).GT..5)GO TO 82	
08900		RN(KB+2)=99
09000		RN(KB+1)=0
09100	82	CONTINUE
09200		GO TO 81
09300	80	IF(RN(J+2).NE.SN)GO TO 6
09400		IF(RN(J+1).NE.8)GO TO 81
09500		IF(RN(J).LT.2)GO TO 81
09510	C  CAN'T CHANGE 0 SIZE TO OTHER YET.
09600		RN(J+4)=0
09700	C  SETS VERT. POS. OF STAFF TO 0.  NEXT IS FOR P5.
09705		IF(RN(J).LT.3)GO TO 81
09710		RN(J+5)=STFSZ
09800	CC85	JZ=-1
09900	81	JA=PWDS(K+1)
10000		DO 7 KA=J,JA-1
10100		XN(LK)=RN(KA)
10200	7	LK=LK+1
10300		IF(L.GE.200)GO TO 150
10400		IF(LK.LE.1700)GO TO 50
10500	150	TYPE 9
10600		GO TO 20
10610	9	FORMAT(' NO ROOM FOR THIS ONE, FILE ENDED.')
10700	50	R=XN(LP+1)
11200		XN(LP+2)=RS
11300		L=L+1
11400		LP=LK
11500		XWDS(L)=LP
11600	6	CONTINUE
11700	17	JX=L
11800		JY=LP
11910		IF(NRS.NE.0)GO TO 200
12000	C******↓↓↓↓↓↓ RHYTH RESET ↓↓↓↓↓↓↓↓
12100		M=LX+1
12200		J=XWDS(LX)
12300		PWDS(LX)=XWDS(LX)
12400		I=LX
12410		DO 243 K=LX,L-1
12420		LB=XWDS(K)+1
12430		IF(XN(LB).NE.16)GO TO 243
12440		IF(XN(LB-1).LT.8)GO TO 243
12445		JL=XWDS(K-1)
12448	244	XN(LB+2)=XN(JL+3)
12450	C PUTS CONTINUATION OF TEXT IMMEDIATELY AFTER PREV. POS.
12455	C  FOR SPACING PROBLEMS BELOW.
12460	243	CONTINUE
12500	24	RA=10000.
12600	C  POSITION
12700		DO 21 K=LX,L-1
12800		JL=XWDS(K)+3
12990		R=XN(JL)
13000		IF(R.EQ.10000)GO TO 21
13020	CC	IF(XN(JL-2).NE.16)GO TO 241
13060	CJ  WILL SORT ONLY NOTES, RESTS, CLEFS, BARS.
13080	CC	I=K
13090	CC	GO TO 242
13100	241	IF(ABS(R-RA).GT..1)GO TO 240
13200		R=RA
13300		XN(JL)=R
13400	C  PUT IN HERE MULTI-VOICE TRAP
13500		GO TO 21
13600	240	IF(R.GT.RA)GO TO 21
13700	C  LINES THEM UP
13800		I=K
13900		RA=R
14000	21	CONTINUE
14100		IF(RA.EQ.10000)GO TO 23
14200	C  JUMP IF ALL SORTED
14300	242	JL=XWDS(I)
14400		LA=JL
14500		N=XN(JL)+3
14600	C  NEXT POINTER
14700		PWDS(M)=PWDS(M-1)+N
14800		M=M+1
14900		DO 22 K=J,J+N-1
15000		RN(K)=XN(JL)
15100	22	JL=JL+1
15200		XN(LA+3)=10000
15300	C  PUT IT ASIDE
15400		J=N+J
15500		GO TO 24
15600	
15610	23	CALL RESTS
15700		LB=LX
15710		JFST=0
15720		POS=0
15740		R5X=0
15770	C  NEXT RECONSTITUTES RHYTHM
15800	25	N=PWDS(LB)
15900		R=RN(N+1)
15910		IF(TR.EQ.0)GO TO 51
15915		IF(R.EQ.1)GO TO 52
15920		IF(R.EQ.5)GO TO 52
15925		IF(R.EQ.6)GO TO 52
15950		IF(R.EQ.17)GO TO 117
16000	51	IF(R.LE.4)GO TO 430
16050		IF(R.LT.17)GO TO 30
16075	C LOOKS FOR 17 AND 18, KSIG AND METER.
16100	430	IF(R.NE.1)GO TO 230
16200		IF(RN(N).LT.7)GO TO 30
16210		IF(RN(N+9))GO TO 30
16220	C SKIPS NON-LEDGER LINE NOTES.
16230		GO TO 530
16300	C  LOOK ONLY AT NOTES AND RESTS AND NON-DOUBLE STOPS, AND BARS,CLEFS
16310	230	IF(R.NE.2)GO TO 330
16320		IF(RN(N).LT.5)GO TO 30
16330	C JUMP IF NO RHYTH VALUE FOUND IN P7 (P9 FOR NOTES)
16335	530	IF(JFST.NE.0)GO TO 130
16340		JFST=LB+1
16345		POS=RN(N+3)
16347	C  POS IS LEFTMOST NOTE OR REST
16350		GO TO 130
16360	330	IF(JFST.EQ.0)GO TO 30
16362	C  ONLY LOOKS AT ITEMS AFTER FIRST N0TE OR REST.
16365		IF(R.NE.4)GO TO 130
16382		IF(RN(N).NE.2)GO TO 30
16390	130	IF(RCLEF(RN(N)))GO TO 30
16395	CJ SKIPS NON-CLEFS
16400		S=RN(N+3)
16500		LA=LB
16600	26	LA=LA+1
16700		IF(LA.GE.L)GO TO 30
16800	C  FIND NEXT IMPORTANT ITEM
16900		NA=PWDS(LA)
17000		RR=RN(NA+1)
17100		IF(RR.LE.4)GO TO 134
17150		IF(RR.LT.17)GO TO 26
17200	134	IF(RR.NE.4)GO TO 34
17300		IF(RN(NA).NE.2)GO TO 26
17400	C  USES ONLY NOTES, RESTS, BARS, CLEFS
17450	34	IF(RCLEF(RN(NA)))GO TO 26
17460	CJ SKIPS NON-CLEFS
17500		RX=RN(NA+3)
17600	C  POSITION OF NEXT ITEM
17700		IF(S.EQ.RX)GO TO 26
17800		A=RX-2
17900		IF(A.LT.S)A=S+.5
18000	C  SPACING WILL BEGIN NEARBY
18010		IF(R.LT.3)GO TO 235
18012		IF(R.GE.17)P=4.
18016	C  PUT IN FOR LARGE KSIGS LATER.
18020		IF(R.EQ.4)P=2.
18030		IF(R.EQ.3)P=6.
18040		IF(RN(NA+5).GE.100.)P=5.
18050	C SPACE FOR BARS, KSIG, METERS, CLEFS (LAST FOR MINI-CLEF)
18055		IF(RR.EQ.17)P=P+3.
18057	C  IF NEXT(RR) IS KSIG, ADD SPACE.
18060		GO TO 335
18100	235	K=9
18200		IF(R.EQ.2)K=7
18300		P=RN(N+K)
18400		P=P+(.125-P)*FIB
18500	135	P=P*15.
18600	C  FINDS RHYTH IN P9 OR P7(REST)
18700	C  IF DIFFERENT SIMULTANEOUS RHYTHMS, ZERO OUT LARGER BEFORE HAND.
18800		IF(P)GO TO 30
18900	C  SKIPS NOTES WITH SUPPRESSED LEDGER LINES.
19000	335	SX=S+P-RX
19050		R5X=R5X+SX
19100	C  SPACE DIFFERENCE
19200	35	DO 29 K=JFST,L
19300		RR=SX
19400		NZ=PWDS(K)+3
19500		RA=RN(NZ)
19600	
19700		IF(RA.LT.A)RR=RR*(RA-S)/(A-S)
19750		IF(RA.GT.S)RN(NZ)=RA+RR	
19775		RR=SX
19800	C  A=BASIC POS. AT THIS TIME.
19900		R=RN(NZ-2)
20000		IF(R4567(R))GO TO 29
20100		NZ=NZ-3
20200		IF(RN(NZ).EQ.2)GO TO 29
20300		RB=RN(NZ+6)
20400		IF(RB.LT.A)RR=RR*(RB-S)/(A-S)
20500		IF(RB.GT.S)RN(NZ+6)=RB+RR
20600		IF(R.EQ.6)CALL BMQ(RN,NZ,A)
21600	29	CONTINUE
21700	30	LB=LB+1
21800		IF(LB.LT.L)GO TO 25
21810	C  GO BACK IF MORE SPACING TO DO
21815		P8=0
21816		LL=0
21820		IF(XLFT.EQ.0)GO TO 600
21830	C  NEXT MOVES LEFT SIDE OF STAFF TO ZERO
21840		R5=POS-.5
21850		R7=RS
21860		R8=-XLFT
21865		R4=-101
21870		R9=0
21880		CALL PTMOVE
21885		R8=POS-XLFT
21890		R4=POS
21925	600	R5=R5X+200
21950	
22000	C  R5 HAS SpACE CHANGE (SEE 35-1)
22020		R9=200
22100		R7=RS
22210		IF(LX.EQ.1)GO TO 300
22220		DO 301 K=IFIX(PWDS(1)),IFIX(PWDS(LX))-1
22230	301	RN(K)=0
22240	C  CLEARS CONFUSION IN MOVER.!!!
22300	300	CALL PTMOVE
22400		RSTFAC(IFIX(RS))=STFSZ
22500		R4=0
22600		R5=200.
22700		LL='J'
22800	400	CALL PTMOVE
22900	C TO JUSTIFY IT.
23000	
24200	500	DO 32 K=IFIX(PWDS(LX)),IFIX(PWDS(L))
24300	32	XN(K)=RN(K)
24400		DO 33 K=LX,L
24410		LL=PWDS(K)
24420		R=XN(LL+1)
24430		RR=XN(LL)
24440		IF(R.NE.2)GO TO 333
24450	C  NEXT FOR RESTS
24460		IF(RR.LT.6)GO TO 33
24470		R=XN(LL+8)
24480		IF(R.LE.0)GO TO 33
24500	C NEXT FOR CENTERING WHOLE REST
24510		R=XN(IFIX(PWDS(K-1))+3)
24515		RR=XN(IFIX(PWDS(K+1))+3)
24520		XN(LL+3)=R+(RR-R)/2.
24530		GO TO 33
24540	333	IF(R.NE.16)GO TO 33
24550		IF(RR.LT.8)GO TO 33
24560		NZ=PWDS(K-1)
24570		IF(XN(NZ+1).NE.16)GO TO 33
24580	C  NEXT FOR CONTINUING TEXT
24590		XN(LL+3)=XN(NZ+3)+XN(NZ+9)*STFSZ*XN(NZ+5)
24650	33	XWDS(K)=PWDS(K)
24675	C  ALL DONE
24700	C****↑↑↑↑↑↑  RHYTH. RESET ↑↑↑↑↑↑↑↑↑↑↑
24710	200	KA=LX
24720		KB=L
24800		LX=L
24900	
24910		RS=RS-1
25000	CJ	IF(RS.GT.-4)GO TO 10
25050		IF(RS.GT.-1)GO TO 10
25100	20	L=JX-1
25200		J=1
25300		WRITE(1),L,JY,
25400		1 (XWDS(K),K=1,L+1),(XN(K),K=1,JY-1),J,J,J,J,RSTFAC,STFF,IV,STFF
25500	C  STUFF ON THE END IS FOR FORTRAN IO BUG.
25510		TYPE 86,NAMX
25600	15	END FILE 1
25700		IF(JT.EQ.0)CALL EXIT
25710		NAMX=NAMX+2
25712		TYPE 86,NAMX
25715	CJ	RS=RSX
25717		RS=3
25720		GO TO 213
25730	201	JT=0
25740		GO TO 20
25800	2	FORMAT(A5,2I)
25900	5	FORMAT(5F)
26100	
26200	
26300	52	A=RN(N+4)
26400		RN(N+4)=A+TR
26500	C TRANSPOSES ONLY BY STAFF STEPS FOR NOW
26600		X=RN(N+5)
26700		IF(RN(N+1).EQ.1)GO TO 11
26705	C  COULD ADD STEM REVERSE HERE.
26800		RN(N+5)=X+TR
26900		GO TO 51
26910	11	A=AMOD(A,100.)
27000		IF(TR.NE.4)GO TO 1101
27100		IF(AMOD(A,7.0).EQ.0)GO TO 101
27200	1101	IF(AMOD(TR-1.0,7.0).NE.0)GO TO 51
27300	C  NEXT IS FOR Bb TRANSP.
27400		B=AMOD(A+7.0,7.0)
27500		IF(B.EQ.0)GO TO 101
27600		IF(B.NE.3)GO TO 51
27700	C  FINDS ORIG. E OR B
27800	101	M=AMOD(X,10.0)
27900	C  FINDS ACCID.
28000		X=X-M
28100	C  STEM DIR. AND DECI.
28200		B=3.
28300	C CHANGES FLAT TO NATURAL SIGN.
28310		IF(M.NE.0)GO TO 118
28320		IF(SIG.NE.200)GO TO 51
28330	C  GO BACK IF A KEY SIG. IS PRESENT
28400	118	IF(M.EQ.3)B=2
28500	C  NO PROVISION YET FOR ## OR bb
28600	2101	RN(N+5)=X+B
28700		GO TO 51
28710	117	SIG=RN(N+5)
28720		IF(TR.EQ.1)SIG=SIG+2
28730		IF(TR.EQ.4)SIG=SIG+1
28740	C CHANGE KSIG FOR Bb AND F INSTS.  ADD CHECK-UP ABOVE LATER.
28745	C  MAKES NATURALS IF CHANGED TO NO KSIG (I.E. =0)
28747		IF(SIG.NE.0)GO TO 217
28748		IF(TR.EQ.1)SIG=-102
28749		IF(TR.EQ.3)SIG=-101
28750	217	RN(N+5)=SIG
28760		GO TO 51
28800		END